package linguo.level.mapObjects;

import java.awt.Graphics;
import java.awt.image.BufferedImage;

import linguo.level.Board;
import linguo.player.Bullet;
import linguo.player.Robot;

public abstract class Casillero {

	protected Board board;
	protected int x, y;
	protected BufferedImage image;

	public Casillero(Board board, int x, int y) {
		this.x = x;
		this.y = y;
		this.board = board;
	}

	/**
	 * Permite dibujar el casillero en pantalla
	 * 
	 * @param g graficos a traves del cual se dibujara
	 */
	public void render(Graphics g) {
		g.drawImage(image, x, y, null);
	}

	/**
	 * Obtiene la posicion X del casillero
	 * 
	 * @return la posicion X del casillero
	 */
	public int getX() {
		return x;
	}

	/**
	 * Obtiene la posicion Y del casillero
	 * 
	 * @return la posicion Y del casillero
	 */
	public int getY() {
		return y;
	}

	/**
	 * Setea la posicion X del casillero
	 * 
	 * @param x la nueva posicion X del casillero
	 */
	public void setX(int x) {
		this.x = x;
	}

	/**
	 * Setea la posicion Y del casillero
	 * 
	 * @param y la nueva posicion Y del casillero
	 */
	public void setY(int y) {
		this.y = y;
	}

	/**
	 * Indica si el casillero es solido o no (es decir si puede ser transitado)
	 * 
	 * @return si es solido true, si no false
	 */
	public abstract boolean isSolid();

	/**
	 * Indica si el casillero esta libre de objetos
	 * 
	 * @return si esta libre true, si no false
	 */
	public abstract boolean isFree();

	/**
	 * Transita el robot por el casillero
	 * 
	 * @param robot el robot que transitara el casillero
	 */
	public abstract void transitar(Robot robot);

	/**
	 * Ataca el casillero
	 * 
	 * @param bullet la bala que atacara el casillero
	 */
	public abstract void atacar(Bullet bullet);

	/**
	 * Recoge lo que haya en el casillero
	 * 
	 * @param robot el robot que recoge lo que haya en el casillero
	 */
	public abstract void recoger(Robot robot);

}
